package br.ufscar.acumaaf.smc.dao;

import java.util.ArrayList;
import java.util.List;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
import br.ufscar.acumaaf.smc.model.MatriculaUsuarioGrupoAtividadeFisica;
import br.ufscar.acumaaf.smc.persistence.DataBaseHelper;

public class MatriculaUsuarioGrupoAtividadeFisicaDAO {

	private DataBaseHelper dataBaseHelper;
	private SQLiteDatabase db;
	
	public MatriculaUsuarioGrupoAtividadeFisicaDAO(Context context) {
		dataBaseHelper = new DataBaseHelper(context);
		db = dataBaseHelper.getWritableDatabase();
	}
	
	public boolean inserirMatricula(MatriculaUsuarioGrupoAtividadeFisica matricula){
		ContentValues mat = new ContentValues();
		mat.put("codigomatriculausuariogrupoatividadefisica", matricula.getCodigomatriculausuariogrupoatividadefisica());
		mat.put("codigogrupoatividadefisica", matricula.getCodigoGrupoAtividadeFisica());
		mat.put("codigousuario", matricula.getCodigoUsuario());
		try{
			Long retorno = db.insert("matriculausuariogrupoatividadefisica", null, mat);
			Log.i(DataBaseHelper.FILTRO, "MatriculaUsuarioGrupoAtividadeFisicaDAO:insereMatricula | Inserindo " + mat + " no Banco de Dados. Retorno = " + retorno + " (ID da linha recém-inserida ou -1 caso tenha ocorrido um erro!)");
			Log.i(DataBaseHelper.FILTRO,"MatriculaUsuarioGrupoAtividadeFisicaDAO:insereMatricula | Fechando o Bando de Dados!");
			//fechando o Banco de Dados
			dataBaseHelper.close();
			db.close();
			if(retorno == Long.valueOf("-1")){
				Log.i(DataBaseHelper.FILTRO,"MatriculaUsuarioGrupoAtividadeFisicaDAO:insereMatricula | Retorno false!");
				return false;
			}
			else{
				Log.i(DataBaseHelper.FILTRO,"MatriculaUsuarioGrupoAtividadeFisicaDAO:insereMatricula | Retorno true!");
				return true;
			}
		} catch (Exception e) {
			Log.e("erro", "MatriculaUsuarioGrupoAtividadeFisicaDAO:insereMatricula | Gerou uma exceção e não inseriu a matricula no Banco de Dados", e);
			return false;
		}
	}
	
	public boolean atualizaMatricula(MatriculaUsuarioGrupoAtividadeFisica matricula){
		ContentValues mat = new ContentValues();
		mat.put("codigomatriculausuariogrupoatividadefisica", matricula.getCodigomatriculausuariogrupoatividadefisica());
		mat.put("codigogrupoatividadefisica", matricula.getCodigoGrupoAtividadeFisica());
		mat.put("codigousuario", matricula.getCodigoUsuario());
		int retorno = db.update("matriculausuariogrupoatividadefisica", mat, "codigomatriculausuariogrupoatividadefisica = " + matricula.getCodigomatriculausuariogrupoatividadefisica(), null);
		if(retorno > 0){
			Log.i(DataBaseHelper.FILTRO,"MatriculaUsuarioGrupoAtividadeFisicaDAO:atualizaMatricula | Atualizando matrícula de código " + matricula.getCodigomatriculausuariogrupoatividadefisica() + " do Banco de Dados. Retorno = " + retorno + "(Número de linhas afetadas pela atualização!)");
			Log.i(DataBaseHelper.FILTRO,"MatriculaUsuarioGrupoAtividadeFisicaDAO:atualizaMatricula | Fechando o Bando de Dados!");
			//fechando o Banco de Dados
			dataBaseHelper.close();
			db.close();
			return true;
		}
		else{
			Log.i(DataBaseHelper.FILTRO,"MatriculaUsuarioGrupoAtividadeFisicaDAO:atualizaMatricula | Falha ao tentar atualizar uma matrícula. Retorno = " + retorno + "(Número de linhas afetadas pela atualização!)");
			Log.i(DataBaseHelper.FILTRO,"MatriculaUsuarioGrupoAtividadeFisicaDAO:atualizaMatricula | Fechando o Bando de Dados!");
			//fechando o Banco de Dados
			dataBaseHelper.close();
			db.close();
			return false;
		}			
	}
	
	public void deletaMatricula(Long codigo){
		int retorno = db.delete("matriculausuariogrupoatividadefisica", "codigomatriculausuariogrupoatividadefisica = " + codigo, null);
		if(retorno > 0){
			Log.i(DataBaseHelper.FILTRO,"MatriculaUsuarioGrupoAtividadeFisicaDAO:deletaMatricula | Deletando a Matrícula de código " + codigo + " do Banco de Dados. Retorno = " + retorno + "(Número de linhas afetadas pela Deleção!)");
		}
		else{
			Log.i(DataBaseHelper.FILTRO,"MatriculaUsuarioGrupoAtividadeFisicaDAO:deletaMatricula | Falha ao tentar deletar uma matrícula. Retorno = " + retorno + "(Número de linhas afetadas pela Deleção!)");
		}
		Log.i(DataBaseHelper.FILTRO,"MatriculaUsuarioGrupoAtividadeFisicaDAO:deletaMatricula | Fechando o Bando de Dados!");
		//fechando o Banco de Dados
		dataBaseHelper.close();
		db.close();
	}
	
	public MatriculaUsuarioGrupoAtividadeFisica buscarMatriculaPeloCodigo(Integer codigo){
		Cursor cursor = null;
		MatriculaUsuarioGrupoAtividadeFisica matricula = new MatriculaUsuarioGrupoAtividadeFisica();
		try {
			 cursor = db.query(true, "matriculausuariogrupoatividadefisica", new String[]{"codigomatriculausuariogrupoatividadefisica","codigogrupoatividadefisica","codigousuario"} , "codigomatriculausuariogrupoatividadefisica = " + codigo, null, null, null, null, null);
			 if(cursor.getCount() > 0){
				int codigoMatriculaIndex = cursor.getColumnIndex("codigomatriculausuariogrupoatividadefisica");
				int codigoGrupoAtividadeFisicaIndex = cursor.getColumnIndex("codigogrupoatividadefisica");
				int codigoUsuarioIndex = cursor.getColumnIndex("codigousuario");
				cursor.moveToFirst();
				matricula.setCodigomatriculausuariogrupoatividadefisica(cursor.getInt(codigoMatriculaIndex));
				matricula.setCodigoGrupoAtividadeFisica(cursor.getInt(codigoGrupoAtividadeFisicaIndex));
				matricula.setCodigoUsuario(cursor.getInt(codigoUsuarioIndex));
				cursor.moveToNext();
			}
			 Log.i(DataBaseHelper.FILTRO,"MatriculaUsuarioGrupoAtividadeFisicaDAO:buscarMatriculaPeloCodigo | Retornando o usuário " + matricula);
			 if(cursor != null){
					cursor.close();
					dataBaseHelper.close();
					db.close();
				}
			 return matricula;
		} 
		finally{
			if(cursor != null){
				cursor.close();
				db.close();
			}
		}
	}
	
	public List<MatriculaUsuarioGrupoAtividadeFisica> buscarTodasMatriculas(){
		Cursor cursor = null;
		try {
			List<MatriculaUsuarioGrupoAtividadeFisica> listaMatriculas = new ArrayList<MatriculaUsuarioGrupoAtividadeFisica>();
			cursor = db.query("matriculausuariogrupoatividadefisica", new String[]{"codigomatriculausuariogrupoatividadefisica","codigogrupoatividadefisica","codigousuario"}, null, null, null, null, null);
			if(cursor.getCount() > 0){
				int codigoMatriculaIndex = cursor.getColumnIndex("codigomatriculausuariogrupoatividadefisica");
				int codigoGrupoAtividadeFisicaIndex = cursor.getColumnIndex("codigogrupoatividadefisica");
				int codigoUsuarioIndex = cursor.getColumnIndex("codigousuario");
				cursor.moveToFirst();
				do{
					MatriculaUsuarioGrupoAtividadeFisica matricula = new MatriculaUsuarioGrupoAtividadeFisica();
					matricula.setCodigomatriculausuariogrupoatividadefisica(cursor.getInt(codigoMatriculaIndex));
					matricula.setCodigoGrupoAtividadeFisica(cursor.getInt(codigoGrupoAtividadeFisicaIndex));
					matricula.setCodigoUsuario(cursor.getInt(codigoUsuarioIndex));
					cursor.moveToNext();					
				}while(!cursor.isAfterLast());
			}
			if(cursor != null){
				cursor.close();
				dataBaseHelper.close();
				db.close();
			}
			return listaMatriculas;
		} 
		finally{
			if(cursor != null){
				cursor.close();
				dataBaseHelper.close();
				db.close();
			}
		}
	}
	
	public List<MatriculaUsuarioGrupoAtividadeFisica> buscarTodasMatriculasPeloCodigoGrupoAtividadeFisica(Integer codigo){
		Cursor cursor = null;
		try {
			List<MatriculaUsuarioGrupoAtividadeFisica> listaMatriculas = new ArrayList<MatriculaUsuarioGrupoAtividadeFisica>();
			cursor = db.query("matriculausuariogrupoatividadefisica", new String[]{"codigomatriculausuariogrupoatividadefisica","codigogrupoatividadefisica","codigousuario"}, "codigogrupoatividadefisica = " + codigo, null, null, null, null);
			if(cursor.getCount() > 0){
				int codigoMatriculaIndex = cursor.getColumnIndex("codigomatriculausuariogrupoatividadefisica");
				int codigoGrupoAtividadeFisicaIndex = cursor.getColumnIndex("codigogrupoatividadefisica");
				int codigoUsuarioIndex = cursor.getColumnIndex("codigousuario");
				cursor.moveToFirst();
				do{
					MatriculaUsuarioGrupoAtividadeFisica matricula = new MatriculaUsuarioGrupoAtividadeFisica();
					matricula.setCodigomatriculausuariogrupoatividadefisica(cursor.getInt(codigoMatriculaIndex));
					matricula.setCodigoGrupoAtividadeFisica(cursor.getInt(codigoGrupoAtividadeFisicaIndex));
					matricula.setCodigoUsuario(cursor.getInt(codigoUsuarioIndex));
					listaMatriculas.add(matricula);
					cursor.moveToNext();					
				}while(!cursor.isAfterLast());
			}
			if(cursor != null){
				cursor.close();
				dataBaseHelper.close();
				db.close();
			}
			return listaMatriculas;
		} 
		finally{
			if(cursor != null){
				cursor.close();
				dataBaseHelper.close();
				db.close();
			}
		}
	}
}